/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entity;

import enviro.*;

/**
 * Entity - 
 * 
 * is the interface in front of all Entity objects, such as DungeonEntity.
 * @author timon
 */
public interface Entity {
    
    // <editor-fold defaultstate="collapsed" desc="Interface">
    
    /**
     * This method is used to place an entity into a given environment.
     * 
     * @param enviro
     *   The environment in which to place the given entity
     * @param position 
     *   The position in which to place the given entity.
     * @param entity 
     *   The entity to place in the given environment.  This argument
     *   should virtually always be 'this'.
     * 
     * @return 
     *   Returns true on a successful operation.  False if the operation failed.
     */
    public boolean place(Environment enviro, int[][] position);
    
    /**
     * Set the <span style="font-style:italic;"> visibility </span> of 
     * the entity.
     * 
     * @param visible 
     *   Sending in a value of <i> true </i> will make the entity visible.
     *   Sending in a value of <i> false </i> will make the entity invisible.
     */
    public void isVisible(boolean visible);
    
    /**
     * Returns the visibility status of an entity.
     * 
     * @return
     *   Returns true when entity is visible, false when it is not.
     */
    public boolean isVisible();
    
    /**
     * Defines the direction that the entity is facing.
     * 
     * @param orientation
     *   The Orientation enumerable representing the desired direction.
     */
    public void setOrientation(Orientation orentation);
    
    /**
     * Reports the current orientation (facing direction )of this entity.
     * 
     * @return
     *   The orientation of the given entity.
     */
    public Orientation getOrientation();
    
    /** 
     * Enable / Disable the ability for other entities to move through 
     * this entity.
     * 
     * @param blocking 
     *   Set to true to make this a blocking entity, false to make this a 
     *   non-blocking entity.
     */
    public void isBlocking(boolean blocking);
    
    /**
     * Report on the ability for other entities to move through this 
     * entity.
     * 
     * @return 
     *   Returns true if other entities may move through this object, 
     *   returns false if they may not.
     */
    public boolean isBlocking();
    
    // </editor-fold>
    
            
}